/**
 * 格式化工具函数
 */

/**
 * 格式化数字为货币格式
 * @param value 数值
 * @param currency 货币符号
 * @returns 格式化后的字符串
 */
export function formatCurrency(value: number, currency: string = ''): string {
  return `${currency} ${value.toLocaleString()}`
}

/**
 * 格式化哈夫币价格
 * @param value 价格数值
 * @returns 格式化后的字符串
 */
export function formatHafCoin(value: number): string {
  if (value === 0) return '0'
  return value.toLocaleString('zh-CN')
}

/**
 * 格式化百分比
 * @param value 数值
 * @param decimals 小数位数
 * @returns 格式化后的字符串
 */
export function formatPercentage(value: number, decimals: number = 2): string {
  return `${value.toFixed(decimals)}%`
}

/**
 * 格式化日期
 * @param date 日期字符串或Date对象
 * @param format 格式类型
 * @returns 格式化后的字符串
 */
export function formatDate(date: string | Date, format: 'full' | 'date' | 'time' | 'relative' = 'full'): string {
  const dateObj = typeof date === 'string' ? new Date(date) : date
  
  if (isNaN(dateObj.getTime())) {
    return '无效日期'
  }
  
  switch (format) {
    case 'full':
      return dateObj.toLocaleString('zh-CN')
    case 'date':
      return dateObj.toLocaleDateString('zh-CN')
    case 'time':
      return dateObj.toLocaleTimeString('zh-CN')
    case 'relative':
      return formatRelativeTime(dateObj)
    default:
      return dateObj.toLocaleString('zh-CN')
  }
}

/**
 * 格式化相对时间
 * @param date 日期对象
 * @returns 相对时间字符串
 */
export function formatRelativeTime(date: Date): string {
  const now = new Date()
  const diff = now.getTime() - date.getTime()
  const seconds = Math.floor(diff / 1000)
  const minutes = Math.floor(seconds / 60)
  const hours = Math.floor(minutes / 60)
  const days = Math.floor(hours / 24)
  
  if (days > 0) {
    return `${days}天前`
  } else if (hours > 0) {
    return `${hours}小时前`
  } else if (minutes > 0) {
    return `${minutes}分钟前`
  } else {
    return '刚刚'
  }
}

/**
 * 格式化文件大小
 * @param bytes 字节数
 * @returns 格式化后的字符串
 */
export function formatFileSize(bytes: number): string {
  if (bytes === 0) return '0 B'
  
  const k = 1024
  const sizes = ['B', 'KB', 'MB', 'GB', 'TB']
  const i = Math.floor(Math.log(bytes) / Math.log(k))
  
  return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`
}

/**
 * 格式化数字为简短形式
 * @param value 数值
 * @returns 格式化后的字符串
 */
export function formatNumber(value: number): string {
  if (value >= 1000000) {
    return `${(value / 1000000).toFixed(1)}M`
  } else if (value >= 1000) {
    return `${(value / 1000).toFixed(1)}K`
  } else {
    return value.toString()
  }
}

/**
 * 截断文本
 * @param text 文本
 * @param maxLength 最大长度
 * @param suffix 后缀
 * @returns 截断后的文本
 */
export function truncateText(text: string, maxLength: number, suffix: string = '...'): string {
  if (text.length <= maxLength) {
    return text
  }
  return text.substring(0, maxLength - suffix.length) + suffix
}

/**
 * 获取等级标签
 * @param grade 等级数字
 * @returns 等级标签
 */
export function getGradeLabel(grade: number): string {
  const gradeMap: Record<number, string> = {
    1: '等级1 普通',
    2: '等级2 优秀',
    3: '等级3 稀有',
    4: '等级4 史诗',
    5: '等级5 传说'
  }
  return gradeMap[grade] || `等级${grade}`
}

/**
 * 获取等级颜色
 * @param grade 等级数字
 * @returns 颜色值
 */
export function getGradeColor(grade: number): string {
  // 使用CSS变量，这些变量在global.css中定义
  const colorMap: Record<number, string> = {
    1: 'var(--grade-bg-1)',
    2: 'var(--grade-bg-2)',
    3: 'var(--grade-bg-3)',
    4: 'var(--grade-bg-4)',
    5: 'var(--grade-bg-5)',
    6: 'var(--grade-bg-6)'
  }
  return colorMap[grade] || 'var(--grade-bg-0)'
}

/**
 * 获取价格变化类名
 * @param currentPrice 当前价格
 * @param previousPrice 之前价格
 * @returns 类名
 */
export function getPriceChangeClass(currentPrice: number, previousPrice?: number): string {
  if (!previousPrice) return ''
  
  if (currentPrice > previousPrice) return 'increase'
  if (currentPrice < previousPrice) return 'decrease'
  return 'stable'
}

/**
 * 获取价格变化文本
 * @param currentPrice 当前价格
 * @param previousPrice 之前价格
 * @returns 变化文本
 */
export function getPriceChangeText(currentPrice: number, previousPrice?: number): string {
  if (!previousPrice) return ''
  
  const change = currentPrice - previousPrice
  const changePercent = ((change / previousPrice) * 100).toFixed(2)
  
  return `${change > 0 ? '+' : ''}${change.toLocaleString()} (${changePercent}%)`
}
